package com.aaa.threadadvanced.demo01;


import java.util.concurrent.*;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 创建线程池的三种方式
 * @date 2022/11/2
    *基于什么创建	 创建的方式
    *Thread类	     继承Thread类
    *Runnable接口	 实现Runnable接口
    *callable接口	 实现callable接口
 */
public class Test01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建一个Callable类型的任务对象
        MyCallable myCallable = new MyCallable();
        //把任务返回的结果也封装到FutureTask对象中
        FutureTask futureTask = new FutureTask(myCallable);
        //创建一个线程对象，把上面的任务交予该线程对象
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get());
//        ExecutorService executorService = Executors.newFixedThreadPool(2);
//        Future<Integer> future = executorService.submit(new MyCallable());
//        executorService.shutdown();
//        System.out.println(future.get());
    }
}
//需要重新call方法，而且看到call方法有返回值，而且有异常要处理
class MyCallable implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int sum=0;
        for (int i = 1; i <=100 ; i++) {
            sum+=i;
        }
        return sum;
    }
}